#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
使用 yield 语句相当于为函数封装好 __iter__() 和 __next__() 方法。
在调用生成器运行的过程中，每次遇到 yield 语句时函数会暂停并保存函数执行的状态，返回 yield 语句中表达式的值，并在下一次执行 next( ) 方法时从当前位置继续运行。
"""


def get_value(num):
    """生成器"""
    for i in ["A", "B"]:
        yield f"{i}{num}"


def Fibonacci(n):
    a, b, counter = 0, 1, 0
    while True:
        if counter > n:
            return
        yield a
        a, b = b, a + b
        counter += 1


if __name__ == '__main__':
    a = Fibonacci(10)
    print(a.__next__())
    print(a.__next__())
    print(list(Fibonacci(10)))
